package collection;

import java.util.*;

/**
 * 排序自定义类型元素
 */
public class SortListDemo2 {
    public static void main(String[] args) {
        List<Point> list = new ArrayList<>();
        Random r = new Random();
        for (int i = 0; i < 10; i++) {
            int num1 = r.nextInt(100);
            int num2 = r.nextInt(100);
            list.add(new Point(num1, num2));
        }
        System.out.println(list);
        /*
            Collections.sort(List list)
            该方法要求List集合中的元素必须是可比较的.判定是否课比较的标准为元素是否实现了接口:
            java.util.Comparable

            当我们使用一个API时,该API反过来要求我们为其修改代码,那么这个API就对我们的程序有侵入性.
            侵入性不利于程序后期维护,应当尽量避免.

            compare:比较
         */
//        Collections.sort(list);
        //单独定义比较器(定义Point元素的比较规则)
        /*Comparator<Point> c = new Comparator<Point>() {
            @Override
            *//*
            compare方法用于定义o1和o2比较大小的规则，并用返回值表达大小关系
            返回值实现的要求：
            如果返回值>0则表达的是o1>o1
            如果返回值<0则表达的是o1<o2
            如果返回值=0则表达的是o1=o2
             *//*
            public int compare(Point o1, Point o2) {
                int Olen1=o1.getX()* o1.getX()+o1.getY()*o1.getY();
                int Olen2=o2.getX()*o2.getX()+o2.getY()*o2.getY();
                return Olen1-Olen2;//反过来减就是降序
            }
        };*/

        Collections.sort(list, (o1,o2)->o1.getX()* o1.getX()+o1.getY()*o1.getY()-o2.getX()*o2.getX()-o2.getY()*o2.getY());

        System.out.println(list);
    }
}
